import java.awt.*;
import javax.swing.*;

/**
 * Die Klasse VawiOrgaTool erzeugt die grafische Oberflaeche zum Einlesen der
 * Dateien und fue die grafische Ausgabe.
 * 
 * @author (Kerstin Schulze)
 * @version (17.1.2014)
 */
public class VawiOrgaTool extends JFrame {
	private SteuerungsController sCon = new SteuerungsController(this);
	// Buttons fuer GUI
	public JButton button1;
	public JButton button2;
	public JButton button3;
	public JButton button4;
	//public JButton button5;
	// Menueleiste
	private JMenuBar menueLeiste;
	// Menueleiste Elemente
	private JMenu datei;
	private JMenu pp;
	private JMenu hilfe;
	// Datei Menuitem
	public JMenuItem oeffnen1;
	public JMenuItem oeffnen2;
	public JMenuItem oeffnen3;
	public JMenuItem speichern;
	public JMenuItem beenden;
	// Pruefungsplanung Menueitem
	public JMenuItem sp;
	// Hilfe Menueitem
	public JMenuItem ueber;
	// Textfelder fuer Anzeige der eingelesenen Dateien
	public JTextArea textarea1;
	public JTextArea textarea2;
	public JTextArea textarea3;
	public JTextArea textarea4;
	public JTextArea textarea5;
	public JTextArea textarea6;
	public JTextArea textarea7;
	public JTextArea textarea8;
	// tabbedPane
	public JTabbedPane tabs;

	/**
	 * Konstruktor zum Erzeugen der Objekte der Klasse. Im Konstruktor wird die
	 * GUI mit den einzelnen Elementen gebaut.
	 */
	public VawiOrgaTool() {
		// Aufbau der GUI
		super("VawiOrgaTool");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Panel fuer Buttons zum Datei oeffnen
		JPanel buttonpanel = new JPanel();
		
		// GridBagLayout--------------------------------
		GridBagLayout gbl = new GridBagLayout();
		GridBagConstraints gbc;
		buttonpanel.setLayout(gbl);
		// GridBagLayout-----------------------------
		
		// Panel mit Button starte pruefungsplanung
		JPanel buttonpanel2 = new JPanel();
		buttonpanel2.setLayout(new FlowLayout());
		
		// Panel fuer Registerkarten
		JPanel student = new JPanel(new BorderLayout());
		JPanel buchung = new JPanel(new BorderLayout());
		JPanel kurs = new JPanel(new BorderLayout());
		JPanel pruefungsplan = new JPanel(new BorderLayout());
		JPanel notenliste = new JPanel(new BorderLayout());
		JPanel anwesenheitsliste = new JPanel(new BorderLayout());
		JPanel platzkartenliste = new JPanel(new BorderLayout());
		JPanel zufriedenheitsmessung = new JPanel(new BorderLayout());
		
		// TabbedPane
		tabs = new JTabbedPane();
		tabs.addTab("Studenten", student);
		tabs.addTab("Buchungen", buchung);
		tabs.addTab("Kurse", kurs);
		tabs.addTab("Pruefungsplan", pruefungsplan);
		tabs.addTab("Notenliste", notenliste);
		tabs.addTab("Anwesenheitsliste", anwesenheitsliste);
		tabs.addTab("Platzkartenliste", platzkartenliste);
		tabs.addTab("Zufriedenheitsmesser", zufriedenheitsmessung);
		tabs.addChangeListener(sCon);
		
		// Button 1: Oeffnen Studentendatei
		button1 = new JButton("Einlesen Studentendatei");
		button1.setPreferredSize(new Dimension(200, 35));

		// GridBagLayout---------------------------------
		gbc = makegbc(0, 0, 1, 1);
		gbc.fill = GridBagConstraints.NONE;
		gbl.setConstraints(button1, gbc);
		buttonpanel.add(button1);
		// GridBagLayout---------------------------------
		
		button1.addActionListener(sCon);
		
		// Button 2: Oeffnen Buchungsdatei
		button2 = new JButton("Einlesen Buchungsdatei");
		button2.setPreferredSize(new Dimension(200, 35));

		// GridBagLayout---------------------------------
		gbc = makegbc(0, 1, 1, 1);
		gbc.fill = GridBagConstraints.NONE;
		gbl.setConstraints(button2, gbc);
		buttonpanel.add(button2);
		// GridBagLayout---------------------------------

		button2.addActionListener(sCon);
		// Button 3: Oeffnen Kursdatei
		button3 = new JButton("Einlesen Kursdatei");
		button3.setPreferredSize(new Dimension(200, 35));
		
		// GridBagLayout---------------------------------
		gbc = makegbc(0, 2, 1, 1);
		gbc.fill = GridBagConstraints.NONE;
		gbl.setConstraints(button3, gbc);
		buttonpanel.add(button3);
		// GridBagLayout---------------------------------
		
		button3.addActionListener(sCon);
		
		// Button 4: Starte Pruefungsplanung
		button4 = new JButton("Starte Pruefungsplanung");
		button4.setPreferredSize(new Dimension(200, 35));
		buttonpanel2.add(button4);
		button4.addActionListener(sCon);
		
		// Menueleiste erzeugen
		menueLeiste = new JMenuBar();
		
		// Menuelemente erzeugen
		datei = new JMenu("Datei");
		pp = new JMenu("Pruefungsplanung");
		hilfe = new JMenu("Hilfe");
		
		// Untermenuelemente erzeugen
		oeffnen1 = new JMenuItem("Einlesen Studentendatei");
		oeffnen1.addActionListener(sCon);
		oeffnen2 = new JMenuItem("Einlesen Buchungsdatei");
		oeffnen2.addActionListener(sCon);
		oeffnen3 = new JMenuItem("Einlesen Kursdatei");
		oeffnen3.addActionListener(sCon);
		speichern = new JMenuItem("Speichern unter");
		speichern.addActionListener(sCon);
		beenden = new JMenuItem("Beenden");
		beenden.addActionListener(sCon);
		sp = new JMenuItem("Starte Pruefungsplanung");
		sp.addActionListener(sCon);
		ueber = new JMenuItem("Ueber das Programm");
		ueber.addActionListener(sCon);
		
		// Menueelemente hinzufuegen
		menueLeiste.add(datei);
		menueLeiste.add(pp);
		menueLeiste.add(hilfe);
		
		// Untermenuelemente hinzufuegen
		datei.add(oeffnen1);
		datei.add(oeffnen2);
		datei.add(oeffnen3);
		datei.addSeparator();
		datei.add(speichern);
		datei.addSeparator();
		datei.add(beenden);
		pp.add(sp);
		hilfe.add(ueber);
		
		// Textfelder erzeugen und TabbedPane zuordnen
		textarea1 = new JTextArea();
		student.add(new JScrollPane(textarea1));
		textarea2 = new JTextArea();
		buchung.add(new JScrollPane(textarea2));
		textarea3 = new JTextArea();
		kurs.add(new JScrollPane(textarea3));
		textarea4 = new JTextArea();
		pruefungsplan.add(new JScrollPane(textarea4));
		textarea5 = new JTextArea();
		notenliste.add(new JScrollPane(textarea5));
		textarea6 = new JTextArea();
		anwesenheitsliste.add(new JScrollPane(textarea6));
		textarea7 = new JTextArea();
		platzkartenliste.add(new JScrollPane(textarea7));
		textarea8 = new JTextArea();
		zufriedenheitsmessung.add(new JScrollPane(textarea8));
		
		// Komponenten einfuegen
		this.add(menueLeiste, BorderLayout.NORTH);
		this.add(tabs, BorderLayout.CENTER);
		this.add(buttonpanel, BorderLayout.WEST);
		this.add(buttonpanel2, BorderLayout.SOUTH);
		this.setSize(1050, 650);
		this.setVisible(true);
	}
	
	/**
	 * Methode zum Erstellen der GridBagConstraints fuer das GridbagLayout.
	 * 
	 * @param x
	 *            (int) x Koordinate
	 * @param y
	 *            (int) y Koordinate
	 * @param width
	 *            (int) Breite
	 * @param height
	 *            (int) Hoehe
	 * @return gbc (GridBagConstraints) die Constraints des Gridbaglayout
	 */
	private GridBagConstraints makegbc(int x, int y, int width, int height) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.insets = new Insets(10, 10, 10, 10);
		return gbc;
	}

	/**
	 * Main-Methode: Einsprungpunkt. In der Methode wird die grafische
	 * Oberflaeche ueber die Erzeugung des Konstruktors erzeugt.
	 * 
	 * @param args
	 *            (String [])
	 */
	public static void main(String[] args) {
		// Erzeugen der GUI durch Aufruf des Konstruktors
		VawiOrgaTool vot = new VawiOrgaTool();
	}
}
